﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using eepg_contratos.Utilities;
using System.Data;
using Oracle.DataAccess.Client;
using System.Xml;

namespace eepg_contratos.Models
{
    #region GeneralServices
    public class Reportes
    {
        public String PROC_LISTAR_CONTRATOS_SUSCR(String finicio, String ffin, String proveedor)
        {
            ConexionModel cm = new ConexionModel();
            OracleConnection con = cm.ProduccionRenova;
            OracleCommand Comm = new OracleCommand();

            Comm.Connection = con;
            Comm.CommandText = "PKG_RENOVA.PROC_LISTAR_CONTRATOS_SUSCR";
            Comm.CommandType = CommandType.StoredProcedure;
            Comm.Parameters.Add("p_finicio", finicio);
            Comm.Parameters.Add("p_ffin", ffin);
            Comm.Parameters.Add("p_proveedor", proveedor);
            Comm.Parameters.Add("p_datos", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_coderror", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_mensaje", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;

            OracleDataReader oReader;
            con.Open();
            oReader = Comm.ExecuteReader();

            DataTable dt = new DataTable("registro");
            dt.Columns.Add("CODIGO_CUENTA");
            dt.Columns.Add("MEDIDOR");
            dt.Columns.Add("CONTRATO");
            dt.Columns.Add("CUENTA");
            dt.Columns.Add("TELEFONO");
            dt.Columns.Add("FECHA_CONTRATO", typeof(DateTime));
            dt.Columns.Add("USUARIO_EJECUTA");
            dt.Columns.Add("MARCA");
            dt.Columns.Add("COLOR");
            dt.Columns.Add("CUOTAS");
            dt.Columns.Add("MONTO", typeof(Decimal));
            dt.Columns.Add("FECHA_ANULACION");
            dt.Columns.Add("ESTADO");
            dt.Columns.Add("DIRECCION");
            dt.Columns.Add("ALMACEN");
            dt.Columns.Add("CEDULA");
            dt.Columns.Add("MOTIVO_ANULACION");

            while (oReader.Read())
            {
                DataRow dr = dt.Rows.Add();
                dr["CODIGO_CUENTA"] = oReader["CODIGO_CUENTA"].ToString();
                dr["MEDIDOR"] = oReader["MEDIDOR"].ToString();
                dr["CONTRATO"] = oReader["CONTRATO"].ToString();
                dr["CUENTA"] = oReader["CUENTA"].ToString();
                dr["TELEFONO"] = oReader["TELEFONO"].ToString();
                dr["FECHA_CONTRATO"] = oReader["FECHA_CONTRATO"].ToString();
                dr["USUARIO_EJECUTA"] = oReader["USUARIO_EJECUTA"].ToString();
                dr["MARCA"] = oReader["MARCA"].ToString();
                dr["COLOR"] = oReader["COLOR"].ToString();
                dr["CUOTAS"] = oReader["CUOTAS"].ToString();
                dr["MONTO"] = oReader["MONTO"].ToString();
                dr["FECHA_ANULACION"] = oReader["FECHA_ANULACION"].ToString();
                dr["ESTADO"] = oReader["ESTADO"].ToString();
                dr["DIRECCION"] = oReader["DIRECCION"].ToString();
                dr["ALMACEN"] = oReader["ALMACEN"].ToString();
                dr["CEDULA"] = oReader["CEDULA"].ToString();
                dr["MOTIVO_ANULACION"] = oReader["MOTIVO_ANULACION"].ToString();
            }

            Comm.Dispose();
            con.Close();
            GC.Collect();

            AppUtil util = new AppUtil();

            return util.ConvertDatatableToXML(dt);
        
        }

        public String PROC_LISTAR_REFRIG_SUSTITUIDAS(String finicio, String ffin, String marca, String filtroPor)
        {
            ConexionModel cm = new ConexionModel();
            OracleConnection con = cm.ProduccionRenova;
            OracleCommand Comm = new OracleCommand();

            Comm.Connection = con;
            Comm.CommandText = "PKG_RENOVA.PROC_LISTAR_REFRIG_SUSTITUIDAS";
            Comm.CommandType = CommandType.StoredProcedure;
            Comm.Parameters.Add("p_finicio", finicio);
            Comm.Parameters.Add("p_ffin", ffin);
            Comm.Parameters.Add("p_marca", marca);
            Comm.Parameters.Add("p_filtroPor", filtroPor);
            Comm.Parameters.Add("p_datos", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_coderror", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_mensaje", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;

            OracleDataReader oReader;
            con.Open();
            oReader = Comm.ExecuteReader();

            DataTable dt = new DataTable("registro");
            dt.Columns.Add("CODIGO_CUENTA");
            dt.Columns.Add("CEDULA");
            dt.Columns.Add("MEDIDOR");
            dt.Columns.Add("CUENTA");
            dt.Columns.Add("DIA_ENTREGA", typeof(DateTime));
            dt.Columns.Add("TELEFONO");
            dt.Columns.Add("CONTRATO");
            dt.Columns.Add("MARCA");
            dt.Columns.Add("PROVEEDOR");
            dt.Columns.Add("COLOR");
            dt.Columns.Add("PIES");
            dt.Columns.Add("NUM_STICKER");
            dt.Columns.Add("FECHA_CONTRATO", typeof(DateTime));
            dt.Columns.Add("FECHA_FACTURA");
            dt.Columns.Add("MARCA_CAMBIO");
            dt.Columns.Add("FECHA_CAMBIO");
            dt.Columns.Add("ESTADO_CAMBIO");
            dt.Columns.Add("FECHA_PASA_RUTA", typeof(DateTime));
            dt.Columns.Add("FECHA_INGRESO_SISTEMA", typeof(DateTime));

            while (oReader.Read())
            {
                DataRow dr = dt.Rows.Add();
                dr["CODIGO_CUENTA"] = oReader["CODIGO_CUENTA"].ToString();
                dr["CEDULA"] = oReader["CEDULA"].ToString();
                dr["MEDIDOR"] = oReader["MEDIDOR"].ToString();
                dr["CUENTA"] = oReader["CUENTA"].ToString();
                dr["DIA_ENTREGA"] = oReader["DIA_ENTREGA"].ToString();
                dr["TELEFONO"] = oReader["TELEFONO"].ToString();
                dr["CONTRATO"] = oReader["CONTRATO"].ToString();
                dr["MARCA"] = oReader["MARCA"].ToString();
                dr["PROVEEDOR"] = oReader["PROVEEDOR"].ToString();
                dr["COLOR"] = oReader["COLOR"].ToString();
                dr["PIES"] = oReader["PIES"].ToString();
                dr["NUM_STICKER"] = oReader["NUM_STICKER"].ToString();
                dr["FECHA_CONTRATO"] = oReader["FECHA_CONTRATO"].ToString();
                dr["FECHA_FACTURA"] = oReader["FECHA_FACTURA"].ToString();
                dr["MARCA_CAMBIO"] = oReader["MARCA_CAMBIO"].ToString();
                dr["FECHA_CAMBIO"] = oReader["FECHA_CAMBIO"].ToString();
                dr["ESTADO_CAMBIO"] = oReader["ESTADO_CAMBIO"].ToString();
                dr["FECHA_PASA_RUTA"] = oReader["FECHA_PASA_RUTA"].ToString();
                dr["FECHA_INGRESO_SISTEMA"] = oReader["FECHA_INGRESO_SISTEMA"].ToString();
            }

            Comm.Dispose();
            con.Close();
            GC.Collect();

            AppUtil util = new AppUtil();

            return util.ConvertDatatableToXML(dt);

        }

        public String PROC_OBTENER_CARTERA_RENOVA(String secuencia, String tipoTarifa, String plazo)
        {
            ConexionModel cm = new ConexionModel();
            OracleConnection con = cm.ProduccionRenova;
            OracleCommand Comm = new OracleCommand();

            Comm.Connection = con;
            Comm.CommandText = "PKG_RENOVA.PROC_OBTENER_CARTERA_VENCIDA";
            Comm.CommandType = CommandType.StoredProcedure;
            Comm.Parameters.Add("p_secuencia", secuencia);
            Comm.Parameters.Add("p_tarifa_dignidad", tipoTarifa);
            Comm.Parameters.Add("p_plazo", plazo);
            Comm.Parameters.Add("p_datos", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_coderror", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_mensaje", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;

            OracleDataReader oReader;
            con.Open();
            oReader = Comm.ExecuteReader();

            DataTable dt = new DataTable("registro");
            dt.Columns.Add("CODIGO_CUENTA");
            dt.Columns.Add("CEDULA");
            dt.Columns.Add("NOMBRE");
            dt.Columns.Add("CONTRATO");
            dt.Columns.Add("FECHA_CONTRATO", typeof(DateTime));
            dt.Columns.Add("FECHA_INICIO_PAGO", typeof(DateTime));
            dt.Columns.Add("FECHA_ULT_PAGO", typeof(DateTime));
            dt.Columns.Add("FECHA_VENCIMIENTO", typeof(DateTime));
            dt.Columns.Add("PROVEEDOR");
            dt.Columns.Add("PRECIO_REAL_PACTADO", typeof(Decimal));
            dt.Columns.Add("MESES_PLAZO_PACTADO", typeof(Int16));
            dt.Columns.Add("PRECIO_REAL_MERCADO", typeof(Decimal));
            dt.Columns.Add("APOYO_ECONOMICO", typeof(Decimal));
            dt.Columns.Add("TOTAL_A_PAGAR", typeof(Decimal));
            dt.Columns.Add("TOTAL_REAL_PAGAR", typeof(Decimal));
            dt.Columns.Add("TOTAL_PAGADO_RENOVA", typeof(Decimal));
            dt.Columns.Add("TOTAL_RECAUDADO_CONTAB", typeof(Decimal));
            dt.Columns.Add("TOTAL_DEVUELTO_CONTAB", typeof(Decimal));
            dt.Columns.Add("TOTAL_PAGADO_CONTAB", typeof(Decimal));
            dt.Columns.Add("ESTADO");
            dt.Columns.Add("SALDO", typeof(Decimal));
            dt.Columns.Add("DIAS_ANTIGUEDAD", typeof(Int16));
            dt.Columns.Add("ESTADO_SUSCRIPTOR");
            dt.Columns.Add("OBSERVACION");
            dt.Columns.Add("FECHA_DESACTIVACION");
            dt.Columns.Add("CODIGO_CUENTA_ANT");
            dt.Columns.Add("SALDO_VENCIDO", typeof(Decimal));
            dt.Columns.Add("TARIFA_DIGNIDAD_NVL", typeof(Decimal));
            dt.Columns.Add("SALDO_REAL", typeof(Decimal));
            dt.Columns.Add("TOTAL_LIQUIDADO", typeof(Decimal));

            while (oReader.Read())
            {
                DataRow dr = dt.Rows.Add();

                dr["CODIGO_CUENTA"] = oReader["CODIGO_CUENTA"].ToString();
                dr["CEDULA"] = oReader["CEDULA"].ToString();
                dr["NOMBRE"] = oReader["NOMBRE"].ToString();
                dr["CONTRATO"] = oReader["CONTRATO"].ToString();
                dr["FECHA_CONTRATO"] = oReader["FECHA_CONTRATO"].ToString();
                dr["FECHA_INICIO_PAGO"] = oReader["FECHA_INICIO_PAGO"].ToString();
                dr["FECHA_ULT_PAGO"] = oReader["FECHA_ULT_PAGO"].ToString();
                dr["FECHA_VENCIMIENTO"] = oReader["FECHA_VENCIMIENTO"].ToString();
                dr["PROVEEDOR"] = oReader["PROVEEDOR"].ToString();
                dr["MESES_PLAZO_PACTADO"] = oReader["MESES_PLAZO_PACTADO"].ToString();
                dr["PRECIO_REAL_MERCADO"] = oReader["PRECIO_REAL_MERCADO"].ToString();
                dr["APOYO_ECONOMICO"] = oReader["APOYO_ECONOMICO"].ToString();
                dr["TOTAL_A_PAGAR"] = oReader["TOTAL_A_PAGAR"].ToString();
                dr["TOTAL_REAL_PAGAR"] = oReader["TOTAL_REAL_PAGAR"].ToString();
                dr["TOTAL_PAGADO_RENOVA"] = oReader["TOTAL_PAGADO_RENOVA"].ToString();
                dr["TOTAL_RECAUDADO_CONTAB"] = oReader["TOTAL_RECAUDADO_CONTAB"].ToString();
                dr["TOTAL_DEVUELTO_CONTAB"] = oReader["TOTAL_DEVUELTO_CONTAB"].ToString();
                dr["TOTAL_PAGADO_CONTAB"] = oReader["TOTAL_PAGADO_CONTAB"].ToString();
                dr["ESTADO"] = oReader["ESTADO"].ToString();
                dr["SALDO"] = oReader["SALDO"].ToString();
                dr["DIAS_ANTIGUEDAD"] = oReader["DIAS_ANTIGUEDAD"].ToString();
                dr["ESTADO_SUSCRIPTOR"] = oReader["ESTADO_SUSCRIPTOR"].ToString();
                dr["OBSERVACION"] = oReader["OBSERVACION"].ToString();
                dr["FECHA_DESACTIVACION"] = oReader["FECHA_DESACTIVACION"].ToString();
                dr["CODIGO_CUENTA_ANT"] = oReader["CODIGO_CUENTA_ANT"].ToString();
                dr["SALDO_VENCIDO"] = oReader["SALDO_VENCIDO"].ToString();
                dr["TARIFA_DIGNIDAD_NVL"] = oReader["TARIFA_DIGNIDAD_NVL"].ToString();
                dr["SALDO_REAL"] = oReader["SALDO_REAL"].ToString();
                dr["TOTAL_LIQUIDADO"] = oReader["TOTAL_LIQUIDADO"].ToString();
            }

            Comm.Dispose();
            con.Close();
            GC.Collect();

            AppUtil util = new AppUtil();

            return util.ConvertDatatableToXML(dt);

        }

        public String PROC_OBTENER_CARTERA_RENOVA_DET(String secuencia, String tipoTarifa, String plazo, String anio)
        {
            ConexionModel cm = new ConexionModel();
            OracleConnection con = cm.ProduccionRenova;
            OracleCommand Comm = new OracleCommand();

            Comm.Connection = con;
            Comm.CommandText = "PKG_RENOVA.PROC_OBTENER_CARTERA_VENCIDA_D";
            Comm.CommandType = CommandType.StoredProcedure;
            Comm.Parameters.Add("p_secuencia", secuencia);
            Comm.Parameters.Add("p_tarifa_dignidad", tipoTarifa);
            Comm.Parameters.Add("p_plazo", plazo);
            Comm.Parameters.Add("p_anio", anio);
            Comm.Parameters.Add("p_datos", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_coderror", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_mensaje", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;

            OracleDataReader oReader;
            con.Open();
            oReader = Comm.ExecuteReader();

            DataTable dt = new DataTable("registro");
            dt.Columns.Add("CODIGO_CUENTA");
            dt.Columns.Add("CEDULA");
            dt.Columns.Add("NOMBRE");
            dt.Columns.Add("CONTRATO");
            dt.Columns.Add("FECHA_CONTRATO", typeof(DateTime));
            dt.Columns.Add("FECHA_INICIO_PAGO", typeof(DateTime));
            dt.Columns.Add("FECHA_ULT_PAGO", typeof(DateTime));
            dt.Columns.Add("FECHA_VENCIMIENTO", typeof(DateTime));
            dt.Columns.Add("PROVEEDOR");
            dt.Columns.Add("MESES_PLAZO_PACTADO", typeof(Int16));
            dt.Columns.Add("PRECIO_REAL_MERCADO", typeof(Decimal));
            dt.Columns.Add("APOYO_ECONOMICO", typeof(Decimal));
            dt.Columns.Add("TOTAL_A_PAGAR", typeof(Decimal));
            dt.Columns.Add("TOTAL_REAL_PAGAR", typeof(Decimal));
            dt.Columns.Add("TOTAL_PAGADO_RENOVA", typeof(Decimal));
            dt.Columns.Add("TOTAL_RECAUDADO_CONTAB", typeof(Decimal));
            dt.Columns.Add("TOTAL_DEVUELTO_CONTAB", typeof(Decimal));
            dt.Columns.Add("TOTAL_PAGADO_CONTAB", typeof(Decimal));
            dt.Columns.Add("ESTADO");
            dt.Columns.Add("SALDO", typeof(Decimal));
            dt.Columns.Add("DIAS_ANTIGUEDAD", typeof(Int32));
            dt.Columns.Add("ESTADO_SUSCRIPTOR");
            dt.Columns.Add("OBSERVACION");
            dt.Columns.Add("FECHA_DESACTIVACION");
            dt.Columns.Add("CODIGO_CUENTA_ANT");
            dt.Columns.Add("SALDO_VENCIDO", typeof(Decimal));
            dt.Columns.Add("TARIFA_DIGNIDAD_NVL", typeof(Decimal));
            dt.Columns.Add("SALDO_REAL", typeof(Decimal));
            dt.Columns.Add("TOTAL_LIQUIDADO", typeof(Decimal));
            dt.Columns.Add("ANIO", typeof(Int16));
            dt.Columns.Add("ENE_R", typeof(Decimal));
            dt.Columns.Add("ENE_D", typeof(Decimal));
            dt.Columns.Add("FEB_R", typeof(Decimal));
            dt.Columns.Add("FEB_D", typeof(Decimal));
            dt.Columns.Add("MAR_R", typeof(Decimal));
            dt.Columns.Add("MAR_D", typeof(Decimal));
            dt.Columns.Add("ABR_R", typeof(Decimal));
            dt.Columns.Add("ABR_D", typeof(Decimal));
            dt.Columns.Add("MAY_R", typeof(Decimal));
            dt.Columns.Add("MAY_D", typeof(Decimal));
            dt.Columns.Add("JUN_R", typeof(Decimal));
            dt.Columns.Add("JUN_D", typeof(Decimal));
            dt.Columns.Add("JUL_R", typeof(Decimal));
            dt.Columns.Add("JUL_D", typeof(Decimal));
            dt.Columns.Add("AGO_R", typeof(Decimal));
            dt.Columns.Add("AGO_D", typeof(Decimal));
            dt.Columns.Add("SEP_R", typeof(Decimal));
            dt.Columns.Add("SEP_D", typeof(Decimal));
            dt.Columns.Add("OCT_R", typeof(Decimal));
            dt.Columns.Add("OCT_D", typeof(Decimal));
            dt.Columns.Add("NOV_R", typeof(Decimal));
            dt.Columns.Add("NOV_D", typeof(Decimal));
            dt.Columns.Add("DIC_R", typeof(Decimal));
            dt.Columns.Add("DIC_D", typeof(Decimal));

            while (oReader.Read())
            {
                DataRow dr = dt.Rows.Add();

                dr["CODIGO_CUENTA"] = oReader["CODIGO_CUENTA"].ToString();
                dr["CEDULA"] = oReader["CEDULA"].ToString();
                dr["NOMBRE"] = oReader["NOMBRE"].ToString();
                dr["CONTRATO"] = oReader["CONTRATO"].ToString();
                dr["FECHA_CONTRATO"] = oReader["FECHA_CONTRATO"].ToString();
                dr["FECHA_INICIO_PAGO"] = oReader["FECHA_INICIO_PAGO"].ToString();
                dr["FECHA_ULT_PAGO"] = oReader["FECHA_ULT_PAGO"].ToString();
                dr["FECHA_VENCIMIENTO"] = oReader["FECHA_VENCIMIENTO"].ToString();
                dr["PROVEEDOR"] = oReader["PROVEEDOR"].ToString();
                dr["MESES_PLAZO_PACTADO"] = oReader["MESES_PLAZO_PACTADO"].ToString();
                dr["PRECIO_REAL_MERCADO"] = oReader["PRECIO_REAL_MERCADO"].ToString();
                dr["APOYO_ECONOMICO"] = oReader["APOYO_ECONOMICO"].ToString();
                dr["TOTAL_A_PAGAR"] = oReader["TOTAL_A_PAGAR"].ToString();
                dr["TOTAL_REAL_PAGAR"] = oReader["TOTAL_REAL_PAGAR"].ToString();
                dr["TOTAL_PAGADO_RENOVA"] = oReader["TOTAL_PAGADO_RENOVA"].ToString();
                dr["TOTAL_RECAUDADO_CONTAB"] = oReader["TOTAL_RECAUDADO_CONTAB"].ToString();
                dr["TOTAL_DEVUELTO_CONTAB"] = oReader["TOTAL_DEVUELTO_CONTAB"].ToString();
                dr["TOTAL_PAGADO_CONTAB"] = oReader["TOTAL_PAGADO_CONTAB"].ToString();
                dr["ESTADO"] = oReader["ESTADO"].ToString();
                dr["SALDO"] = oReader["SALDO"].ToString();
                dr["DIAS_ANTIGUEDAD"] = oReader["DIAS_ANTIGUEDAD"].ToString();
                dr["ESTADO_SUSCRIPTOR"] = oReader["ESTADO_SUSCRIPTOR"].ToString();
                dr["OBSERVACION"] = oReader["OBSERVACION"].ToString();
                dr["FECHA_DESACTIVACION"] = oReader["FECHA_DESACTIVACION"].ToString();
                dr["CODIGO_CUENTA_ANT"] = oReader["CODIGO_CUENTA_ANT"].ToString();
                dr["SALDO_VENCIDO"] = oReader["SALDO_VENCIDO"].ToString();
                dr["TARIFA_DIGNIDAD_NVL"] = oReader["TARIFA_DIGNIDAD_NVL"].ToString();
                dr["SALDO_REAL"] = oReader["SALDO_REAL"].ToString();
                dr["TOTAL_LIQUIDADO"] = oReader["TOTAL_LIQUIDADO"].ToString();
                dr["ANIO"] = oReader["ANIO"].ToString();
                dr["ENE_R"] = oReader["ENE_R"].ToString();
                dr["ENE_D"] = oReader["ENE_D"].ToString();
                dr["FEB_R"] = oReader["FEB_R"].ToString();
                dr["FEB_D"] = oReader["FEB_D"].ToString();
                dr["MAR_R"] = oReader["MAR_R"].ToString();
                dr["MAR_D"] = oReader["MAR_D"].ToString();
                dr["ABR_R"] = oReader["ABR_R"].ToString();
                dr["ABR_D"] = oReader["ABR_D"].ToString();
                dr["MAY_R"] = oReader["MAY_R"].ToString();
                dr["MAY_D"] = oReader["MAY_D"].ToString();
                dr["JUN_R"] = oReader["JUN_R"].ToString();
                dr["JUN_D"] = oReader["JUN_D"].ToString();
                dr["JUL_R"] = oReader["JUL_R"].ToString();
                dr["JUL_D"] = oReader["JUL_D"].ToString();
                dr["AGO_R"] = oReader["AGO_R"].ToString();
                dr["AGO_D"] = oReader["AGO_D"].ToString();
                dr["SEP_R"] = oReader["SEP_R"].ToString();
                dr["SEP_D"] = oReader["SEP_D"].ToString();
                dr["OCT_R"] = oReader["OCT_R"].ToString();
                dr["OCT_D"] = oReader["OCT_D"].ToString();
                dr["NOV_R"] = oReader["NOV_R"].ToString();
                dr["NOV_D"] = oReader["NOV_D"].ToString();
                dr["DIC_R"] = oReader["DIC_R"].ToString();
                dr["DIC_D"] = oReader["DIC_D"].ToString();
            }

            Comm.Dispose();
            con.Close();
            GC.Collect();

            AppUtil util = new AppUtil();

            return util.ConvertDatatableToXML(dt);

        }

        public String PROC_RECAREME(String finicio, String ffin)
        {
            ConexionModel cm = new ConexionModel();
            OracleConnection con = cm.ProduccionRenova;
            OracleCommand Comm = new OracleCommand();

            Comm.Connection = con;
            Comm.CommandText = "PKG_RENOVA.PROC_RECAREME";
            Comm.CommandType = CommandType.StoredProcedure;
            Comm.Parameters.Add("p_fecha_ini", finicio);
            Comm.Parameters.Add("p_fecha_fin", ffin);
            Comm.Parameters.Add("p_datos", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_coderror", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_mensaje", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;

            OracleDataReader oReader;
            con.Open();
            oReader = Comm.ExecuteReader();

            DataTable dt = new DataTable("registro");
            dt.Columns.Add("CATEGORIA");
            dt.Columns.Add("CONCEPTO");
            dt.Columns.Add("PLAZO", typeof(Int16));
            dt.Columns.Add("VALOR", typeof(Decimal));

            while (oReader.Read())
            {
                DataRow dr = dt.Rows.Add();
                dr["CATEGORIA"] = oReader["CATEGORIA"].ToString();
                dr["CONCEPTO"] = oReader["CONCEPTO"].ToString();
                dr["PLAZO"] = oReader["PLAZO"].ToString();
                dr["VALOR"] = oReader["VALOR"].ToString();
            }

            Comm.Dispose();
            con.Close();
            GC.Collect();

            AppUtil util = new AppUtil();

            return util.ConvertDatatableToXML(dt);

        }

        public String PROC_RECARENO(String finicio, String ffin)
        {
            ConexionModel cm = new ConexionModel();
            OracleConnection con = cm.ProduccionRenova;
            OracleCommand Comm = new OracleCommand();

            Comm.Connection = con;
            Comm.CommandText = "PKG_RENOVA.PROC_RECARENO";
            Comm.CommandType = CommandType.StoredProcedure;
            Comm.Parameters.Add("p_fecha_ini", finicio);
            Comm.Parameters.Add("p_fecha_fin", ffin);
            Comm.Parameters.Add("p_datos", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_coderror", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_mensaje", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;

            OracleDataReader oReader;
            con.Open();
            oReader = Comm.ExecuteReader();

            DataTable dt = new DataTable("registro");
            dt.Columns.Add("FECHA_PAGO", typeof(DateTime));
            dt.Columns.Add("CODIGO_CUENTA");
            dt.Columns.Add("NOMBRE");
            dt.Columns.Add("FECHA_CREDITO", typeof(DateTime));
            dt.Columns.Add("VALOR_CREDITO", typeof(Decimal));
            dt.Columns.Add("VALOR_SUBSIDIADO", typeof(Decimal));
            dt.Columns.Add("VALOR_FACTURADO", typeof(Decimal));
            dt.Columns.Add("CAPITAL", typeof(Decimal));
            dt.Columns.Add("INTERES", typeof(Decimal));
            dt.Columns.Add("VALOR_RECAUDADO", typeof(Decimal));


            while (oReader.Read())
            {
                DataRow dr = dt.Rows.Add();
                
                dr["FECHA_PAGO"] = oReader["FECHA_PAGO"].ToString();
                dr["CODIGO_CUENTA"] = oReader["CODIGO_CUENTA"].ToString();
                dr["NOMBRE"] = oReader["NOMBRE"].ToString();
                dr["FECHA_CREDITO"] = oReader["FECHA_CREDITO"].ToString();
                dr["VALOR_CREDITO"] = oReader["VALOR_CREDITO"].ToString();
                dr["VALOR_SUBSIDIADO"] = oReader["VALOR_SUBSIDIADO"].ToString();
                dr["VALOR_FACTURADO"] = oReader["VALOR_FACTURADO"].ToString();
                dr["CAPITAL"] = oReader["CAPITAL"].ToString();
                dr["INTERES"] = oReader["INTERES"].ToString();
                dr["VALOR_RECAUDADO"] = oReader["VALOR_RECAUDADO"].ToString();
            }

            Comm.Dispose();
            con.Close();
            GC.Collect();

            AppUtil util = new AppUtil();

            return util.ConvertDatatableToXML(dt);

        }

        public String PROC_PROCESOS_CARTERA_VENCIDA()
        {
            ConexionModel cm = new ConexionModel();
            OracleConnection con = cm.ProduccionRenova;
            OracleCommand Comm = new OracleCommand();

            Comm.Connection = con;
            Comm.CommandText = "PKG_RENOVA.PROC_PROCESOS_CARTERA_VENCIDA";
            Comm.CommandType = CommandType.StoredProcedure;
            Comm.Parameters.Add("p_datos", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_coderror", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_mensaje", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;

            OracleDataReader oReader;
            con.Open();
            oReader = Comm.ExecuteReader();

            DataTable dt = new DataTable("registro");
            dt.Columns.Add("ID", typeof(Int32));
            dt.Columns.Add("DESCRIPCION");

            while (oReader.Read())
            {
                DataRow dr = dt.Rows.Add();
                dr["ID"] = oReader["ID"].ToString();
                dr["DESCRIPCION"] = oReader["DESCRIPCION"].ToString();
            }

            Comm.Dispose();
            con.Close();
            GC.Collect();

            AppUtil util = new AppUtil();

            return util.ConvertDatatableToXML(dt);

        }

        public String PROC_CONSULTA_TABLA(String nombreTabla)
        {
            ConexionModel cm = new ConexionModel();
            OracleConnection con = cm.ProduccionRenova;
            OracleCommand Comm = new OracleCommand();
            try
            {
                con.Open();

                Comm.Connection = con;
                //Comm.CommandText = "pkg_reportes.consulta_tabla";
                Comm.CommandText = "select t.* from " + nombreTabla + " t";
                Comm.XmlCommandType = OracleXmlCommandType.Query;
                Comm.Parameters.Add("p_tabla", OracleDbType.Varchar2, 100, nombreTabla, ParameterDirection.Input);
                Comm.Parameters.Add("p_datos", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
                Comm.Parameters.Add("p_coderror", OracleDbType.Varchar2, 25).Direction = ParameterDirection.Output;
                Comm.Parameters.Add("p_mensaje", OracleDbType.Varchar2, 100).Direction = ParameterDirection.Output;

                Comm.BindByName = true;
                Comm.XmlQueryProperties.MaxRows = -1;

                XmlReader xmlReader = Comm.ExecuteXmlReader();
                XmlDocument xmlDocument = new XmlDocument();
                xmlDocument.PreserveWhitespace = true;
                xmlDocument.Load(xmlReader);


                return xmlDocument.OuterXml;
            }
            catch (Exception ex)
            {
                return "Ocurrió un error al traer los datos. Consulte al administrador del sistema.";
            }

        }
    
    }
    #endregion
}
    